#include <cstdio>
#include <memory.h>

double f[ 6 ][ 6 ][ 6 ][ 6 ][ 6 ][ 5 ], si[ 5 ];
int n, d, x[ 5 ], y[ 5 ], hp[ 5 ];

bool check( int i, int j )
{
    return ( x[ i ] - x[ j ] ) * ( x[ i ] - x[ j ] ) + ( y[ i ] - y[ j ] ) * ( y[ i ] - y[ j ] ) <= d * d;
}

void init( )
{
    int i, j;
    memset( f, 0, sizeof( f ) );
    for ( i = 0; i < 5; i++ )
    {
        si[ i ] = 0;
        scanf("%d%d", &x[ i ], &y[ i ]);
    }
    for ( i = 0; i < 5; i++ )
        scanf("%d", &hp[ i ]);
    for ( i = 0; i < 5; i++ )
    {
        if ( hp[ i ] == 1 )
            si[ i ] = 0.2;
        hp[ i ]--;
        f[ hp[ 0 ] ][ hp[ 1 ] ][ hp[ 2 ] ][ hp[ 3 ] ][ hp[ 4 ] ][ i ] = 0.2;
        hp[ i ]++;
    }
}

void work( )
{
    int i[ 5 ], j, k, l, t, c;
    bool flag;
    n++;
    for ( i[ 0 ] = hp[ 0 ]; i[ 0 ] >= 0; i[ 0 ]-- )
        for ( i[ 1 ] = hp[ 1 ]; i[ 1 ] >= 0; i[ 1 ]-- )
            for ( i[ 2 ] = hp[ 2 ]; i[ 2 ] >= 0; i[ 2 ]-- )
                for ( i[ 3 ] = hp[ 3 ]; i[ 3 ] >= 0; i[ 3 ]-- )
                    for ( i[ 4 ] = hp[ 4 ]; i[ 4 ] >= 0; i[ 4 ]-- )
                    {
                        if ( hp[ 0 ] + hp[ 1 ] + hp[ 2 ] + hp[ 3 ] + hp[ 4 ] - i[ 0 ] - i[ 1 ] - i[ 2 ] - i[ 3 ] - i[ 4 ] > n ) continue;
                        for ( j = 0; j < 5; j++ )
                        {
                            flag = false;
                            if ( i[ j ] == hp[ j ] ) continue;
                            t = 0;
                            for ( k = 0; k < 5; k++ )
                            {
                                if ( j == k || i[ k ] == hp[ k ] || !check( j, k ) ) continue;
                                c = 0;
                                flag = true;
                                for ( l = 0; l < 5; l++ )
                                    if ( l != k && ( i[ l ] || l == j ) )
                                        c += check( k, l );
                                switch ( j )
                                {
                                    case 0: f[ i[ 0 ] ][ i[ 1 ] ][ i[ 2 ] ][ i[ 3 ] ][ i[ 4 ] ][ j ] += f[ i[ 0 ] + 1 ][ i[ 1 ] ][ i[ 2 ] ][ i[ 3 ] ][ i[ 4 ] ][ k ] / c; break;
                                    case 1: f[ i[ 0 ] ][ i[ 1 ] ][ i[ 2 ] ][ i[ 3 ] ][ i[ 4 ] ][ j ] += f[ i[ 0 ] ][ i[ 1 ] + 1 ][ i[ 2 ] ][ i[ 3 ] ][ i[ 4 ] ][ k ] / c; break;
                                    case 2: f[ i[ 0 ] ][ i[ 1 ] ][ i[ 2 ] ][ i[ 3 ] ][ i[ 4 ] ][ j ] += f[ i[ 0 ] ][ i[ 1 ] ][ i[ 2 ] + 1 ][ i[ 3 ] ][ i[ 4 ] ][ k ] / c; break;
                                    case 3: f[ i[ 0 ] ][ i[ 1 ] ][ i[ 2 ] ][ i[ 3 ] ][ i[ 4 ] ][ j ] += f[ i[ 0 ] ][ i[ 1 ] ][ i[ 2 ] ][ i[ 3 ] + 1 ][ i[ 4 ] ][ k ] / c; break;
                                    case 4: f[ i[ 0 ] ][ i[ 1 ] ][ i[ 2 ] ][ i[ 3 ] ][ i[ 4 ] ][ j ] += f[ i[ 0 ] ][ i[ 1 ] ][ i[ 2 ] ][ i[ 3 ] ][ i[ 4 ] + 1 ][ k ] / c; break;
                                }
                            }
                            if ( i[ j ] == 0 && flag )
                                si[ j ] += f[ i[ 0 ] ][ i[ 1 ] ][ i[ 2 ] ][ i[ 3 ] ][ i[ 4 ] ][ j ];
                        }
                    }
    printf("%.3lf", si[ 0 ]);
    for ( j = 1; j < 5; j++ )
        printf(" %.3lf", si[ j ]);
    puts("");
}

int main( )
{
    while ( scanf("%d%d", &n, &d) != EOF )
    {
        init( );
        work( );
    }
    return 0;
}
